我做 TACT,是被一個很直覺的想法坑到的:模型越有把握,那一票就應該越重。
聽起來很合理,實驗一跑卻翻車了。只要模型的信心方向反過來,高信心加權就會把錯誤放大,而且可能輸給最普通的多數決。這 30 天,我想把這段研究過程完整寫下來。會有公式和 Python,也會保留那些做壞、做錯,後來被實驗推翻的版本。
Self-Consistency 的做法不難。讓同一個模型回答同一題很多次,再統計最後答案。假設 16 條推理軌跡的結果是:
答案就是 A。比起只問一次,這種做法比較不容易被單次失誤帶走。
麻煩出在票的品質不一樣。有些推理很完整,有些中途跳了好幾步;偏偏模型講得有把握,也不保證它算對。如果信心和正確性同方向,加權通常有幫助。方向反了,權重越大反而越糟。
我在模擬實驗裡刻意做了一條反向信心通道。普通的信心加權一路往下掉,帶符號的權重卻能把這條訊號救回來。這就是 TACT 想處理的情況。
對題目 q 的第 i 條軌跡,我會記下答案 a 和信心 c,再把同一題內的信心排名轉成標準化分數 φ。候選答案的得分是:
γ 大於 0 時,高信心票比較重;γ 小於 0 時,權重方向反過來;γ 等於 0 時,每一票的權重都是 1,結果就和普通 Self-Consistency 一樣。
真正麻煩的地方在於 γ 不能亂猜。TACT 先用開發資料測量「同一題裡,信心能不能把正確軌跡排在錯誤軌跡前面」,再把估計誤差一起算進去。證據太弱時,γ 會留在 0。
這裡有個很容易誤讀的結果:TACT 和多數決同分,並不能直接證明安全機制有效。也可能是資料裡明明有訊號,估計器卻沒抓到。兩種情況都會看到 γ=0。後面的實驗會刻意破壞信心訊號,也會把已知強度的訊號種回真實模型軌跡,檢查死區到底擋住了什麼、又漏掉了什麼。

圖:合成訊號掃描。橫軸控制信心與正確性的耦合方向;灰黑線是未使用信心的 SC,其他曲線則顯示加權方法是否能跟著訊號切換方向。
前幾篇先把 Self-Consistency、答案正規化和信心排名做成可以執行的 Python 程式。接著才進到 Somers' D、γ 的推導、收縮估計、無標籤版本和半無標籤版本。
實驗部分不只會放最後的分數。我會談投票平手偏差、模擬器把正確答案固定在編號 0、macOS 不接受其中一項資源上限設定,讓參考解答全部執行失敗,以及「薄窗現象」:有機會被聚合方法救回來的題目,可能只佔整份測試集的一小部分。
下一篇先回到最基本的 Self-Consistency。我會用一個小型 Python 範例,把多次取樣、答案正規化和多數決從頭跑一遍。
論文預印本:TACT: Trust-Anchored Confidence Tempering for Self-Consistency Voting in Large Language Models